<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>
        // Reflect: 操作对象
        // Reflect作用： 是用来调用对象的基本操作方法


        const obj = {
            name: '张三',
            age: 18,
            sex: '男',
            [Symbol()]: 123,

        }

        Object.defineProperty(obj, 'abc', {
            enumerable: false,
            value: 'abc'
        })

        // obj.name
        console.log(Reflect.get(obj, 'name'));

        // 判断一个对象中的属性是否存在
        console.log(Reflect.has(obj, 'name'));
        // 返回一个包含所有自身属性（不包含继承属性）的数组
        console.log("Reflect", Reflect.ownKeys(obj));
        console.log("Object.keys", Object.keys(obj));



        // Reflect的应用

        const test = {
            a: 1,
            b: 2,
            // 语法糖 => Object.defineProperty(obj,'c',{get(){}})
            get c() {
                return this.a + this.b
            }
        }

        const proxy = new Proxy(test, {
            get(target, key, receiver) {
                console.log('get', key);
                // return target[key]
                // receiver 函数对象中的this指向
                return Reflect.get(target, key, receiver)
            }
        })

        console.log(proxy.c);
        // console.log(test.a, test.b);








    </script>
</body>

</html>